public class Solution2 {
    //解法二：一个位置有两种选择（选或者不选）
    List<Integer> path;
    List<List<Integer>> ret;
    public List<List<Integer>> subsets(int[] nums) {
        path = new ArrayList<>();
        ret = new ArrayList<>();
        dfs(nums,0);
        return ret;
    }

    public void dfs(int[] nums,int pos) {
        //每一次决策树都是一次结果
        ret.add(new ArrayList<>(path));
        for(int i=pos;i<nums.length;i++) {
            path.add(nums[i]);
            dfs(nums,i+1);
            path.remove(path.size()-1);//恢复现场
        }

    }
}
